import  CryptoJS from "crypto-js";
// import  AES from "crypto-js/aes";
// import  utf8 from "crypto-js/enc-utf8";
// var CryptoJS = require("crypto-js");
// // 加载des算法
// // var tripledes = require("crypto-js/tripledes");
// CryptoJS.encrypt("","",{});

// AES.encrypt("","",{})

window["CryptoJS"] = CryptoJS;

const key = "fb433a7dabac3980a8f9960b3fca3c92ba008c12092370822b03e955536969c9";
const iv = "354ced8b8cc042dd5b97b41371ba0fec";

// AES 加密，AES-128, AES-192, AES-256
  // AES-128: key和iv都是16个字节，16*8=128bit
  // AES-192: key和iv都是24个字节，24*8=128bit
  // AES-256: key和iv都是32个字节，32*8=128bit
  // iv 似乎一般都是纯数字
  // 例如：AES_encrypt_CBC('需要加密的内容', '1234567890123456', '1234567890654321');
export function AES_CBC_encrypt(message) {
  // utf8字符串—>WordArray对象，WordArray是一个保存32位整数的数组，相当于转成了二进制
  let keyHex = window["CryptoJS"].enc.Hex.parse(key); //
  let ivHex = window["CryptoJS"].enc.Hex.parse(iv);
  let messageHex = window["CryptoJS"].enc.Utf8.parse(message);
  let encrypted = window["CryptoJS"].AES.encrypt(messageHex, keyHex, {
    iv: ivHex,
    mode: window["CryptoJS"].mode.CBC,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  return encrypted.toString();// base64结果
  //return encrypted.ciphertext.toString();   // 二进制结果
}
export function AES_CBC_encrypt_base64(message) {
  // utf8字符串—>WordArray对象，WordArray是一个保存32位整数的数组，相当于转成了二进制
  let keyHex = window["CryptoJS"].enc.Base64.parse(key); //
  let ivHex = window["CryptoJS"].enc.Base64.parse(iv);
  let messageHex = window["CryptoJS"].enc.Utf8.parse(message);
  let encrypted = window["CryptoJS"].AES.encrypt(messageHex, keyHex, {
    iv: ivHex,
    mode: window["CryptoJS"].mode.CBC,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  return encrypted.toString();// base64结果
  //return encrypted.ciphertext.toString();   // 二进制结果
}
// AES CBC模式解密
export function AES_CBC_decrypt(messageBase64) {
  // 如果加密后没有转成base64,那么先要转成base64再传入
  //let encryptedHexStr = CryptoJS.enc.Hex.parse(word);   // 从二进制文本转成二进制
  //messageBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr);    // 转成base64
  let keyHex = window["CryptoJS"].enc.Hex.parse(key);
  let ivHex = window["CryptoJS"].enc.Hex.parse(iv);
  let decrypt = window["CryptoJS"].AES.decrypt(messageBase64, keyHex, {
    iv: ivHex,
    mode: window["CryptoJS"].mode.CBC,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  let decryptedStr = decrypt.toString(window["CryptoJS"].enc.Utf8);
  return decryptedStr.toString();
}

// AES CBC模式解密
export function AES_CBC_decrypt_base64(messageBase64) {
  // 如果加密后没有转成base64,那么先要转成base64再传入
  //let encryptedHexStr = CryptoJS.enc.Hex.parse(word);   // 从二进制文本转成二进制
  //messageBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr);    // 转成base64
  let keyHex = window["CryptoJS"].enc.Base64.parse(key);
  let ivHex = window["CryptoJS"].enc.Base64.parse(iv);
  let decrypt = window["CryptoJS"].AES.decrypt(messageBase64, keyHex, {
    iv: ivHex,
    mode: window["CryptoJS"].mode.CBC,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  let decryptedStr = decrypt.toString(window["CryptoJS"].enc.Utf8);
  return decryptedStr.toString();
}
// AES ECB模式加密，没有iv
export function AES_ECB_encrypt(message, key) {
  // utf8字符串—>WordArray对象，WordArray是一个保存32位整数的数组，相当于转成了二进制
  let keyHex = window["CryptoJS"].enc.Utf8.parse(key); //
  let messageHex = window["CryptoJS"].enc.Utf8.parse(message);
  let encrypted = window["CryptoJS"].AES.encrypt(messageHex, keyHex, {
    mode: window["CryptoJS"].mode.ECB,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  return encrypted.toString();// base64结果
  //return encrypted.ciphertext.toString();   // 二进制结果
}
// AES ECB模式解密
export function AES_ECB_decrypt(messageBase64, key) {
  // 如果加密后没有转成base64,那么先要转成base64再传入
  //let encryptedHexStr = CryptoJS.enc.Hex.parse(word);   // 从二进制文本转成二进制
  //messageBase64 = CryptoJS.enc.Base64.stringify(encryptedHexStr);    // 转成base64
  let keyHex = window["CryptoJS"].enc.Utf8.parse(key);
  let decrypt = window["CryptoJS"].AES.decrypt(messageBase64, keyHex, {
    mode: window["CryptoJS"].mode.ECB,
    padding: window["CryptoJS"].pad.Pkcs7
  });
  let decryptedStr = decrypt.toString(window["CryptoJS"].enc.Utf8);
  return decryptedStr.toString();
}
window["AES_CBC_encrypt"]=AES_CBC_encrypt;
window["AES_CBC_encrypt_base64"]=AES_CBC_encrypt_base64;
window["AES_CBC_decrypt"]=AES_CBC_decrypt;
window["AES_CBC_decrypt_base64"]=AES_CBC_decrypt_base64;
window["AES_ECB_encrypt"]=AES_ECB_encrypt;
window["AES_ECB_decrypt"]=AES_ECB_decrypt;
